// 命令行实例
// 二进制程序关注点分离的指导性原则
//     1.将程序拆分成main.rs和lib.rs，将业逻辑放入lib.rs
//     2.当命令行解析逻辑较少时，将它放在main.rs也行
//     3.当命令行解析逻辑变复杂时，将它从main.rs提取到lib.rs
// main功能：
//     1.使用参数调用命令行解析逻辑
//     2.进行其他的配置
//     3.调用lib.rs中的run函数
//     4.处理run函数可能出现的错误

use hello::Config;
use std::env;
use std::process;

fn main() {
    let args: Vec<String> = env::args().collect();
    let config = Config::new(&args).unwrap_or_else(|err| {
        println!("解析参数出错了：{}", err);
        process::exit(1);
    });
    if let Err(e) = hello::run(config) {
        println!("文件读取出错了：{}", e);
        process::exit(1);
    }
}
